Ext.ns('Tm.bill');
Tm.bill.BillIndexPanel = Ext.extend(Ext.Panel, {
			frame : true,
			autoWidth : true,
			// autoHeight : true,
			layout : 'fit',
			initComponent : function() {
				var form = new Tm.common.FormPanel({
							layout : 'table',
							layoutConfig : {
								columns : 3
							},
							defaults : {
								xtype : 'textfield',
								margins : '0 5 0 0'
							},
							items : [{
										plugins : [Ext.ux.FieldLabeler],
										name : 'code',
										fieldLabel : '帐单编号'
									}, {
										plugins : [Ext.ux.FieldLabeler],
										name : 'taskName',
										fieldLabel : '案件名称'
									}, {
										plugins : [Ext.ux.FieldLabeler],
										xtype : 'googlesearchfield',
										fieldLabel : '客户名称',
										name : 'compId',
										hiddenName : 'compId',
										width : 300,
										queryURL : 'company/goolgeCtCompanyByCompanyName.do'
									}, {
										plugins : [Ext.ux.FieldLabeler],
										fieldLabel : '责任律师',
										name : 'owner',
										hiddenName : 'owner',
										// allowBlank : false,
										valueField : 'id',
										displayField : 'name',
										typeAhead : true,
										xtype : 'combo',
										mode : 'remote',
										forceSelection : true,
										triggerAction : 'all',
										emptyText : '请选择...',
										selectOnFocus : true,
										store : new Ext.data.JsonStore({// /列表框中的选项数据
											url : 'user/getAllLawyer.do',
											// autoLoad : true,
											proxy : new Ext.data.HttpProxy({
														url : 'user/getAllLawyer.do'
													}),
											fields : [{
														name : 'id'
													}, {
														name : 'name'
													}]
										})
									}, {
										plugins : [Ext.ux.FieldLabeler],
										name : 'status',
										fieldLabel : '状态',
										// width:150,
										xtype : 'combo',
										mode : 'local',
										typeAhead : true,
										forceSelection : true,
										mode : 'local',
										triggerAction : 'all',
										emptyText : '请选择...',
										selectOnFocus : true,
										store : Tm.data.billStatus
									}, {
										plugins : [Ext.ux.FieldLabeler],
										xtype : 'compositefield',
										fieldLabel : '付款期限',
										msgTarget : 'side',
										items : [{
													id : 'deadlineStartDate',
													xtype : 'datefield',
													format : 'Y-m-d',
													name : 'deadlineStartDate',
													vtype : 'daterange',
													endDateField : 'deadlineEndDate'
												}, {
													xtype : 'displayfield',
													value : '-'
												}, {
													id : 'deadlineEndDate',
													xtype : 'datefield',
													format : 'Y-m-d',
													name : 'deadlineEndDate',
													vtype : 'daterange',
													startDateField : 'deadlineStartDate' // id of the start date field
												}]
									}]
						});
				var sm = new Ext.grid.CheckboxSelectionModel({
							singleSelect : true
						});
				var cm = new Ext.grid.ColumnModel([sm, {
							header : 'id',
							width : 20,
							dataIndex : 'id',
							hidden : true
						}, {
							header : 'compId',
							width : 20,
							dataIndex : 'compId',
							hidden : true
						}, {
							header : 'taskId',
							width : 20,
							dataIndex : 'taskId',
							hidden : true
						}, {
							header : '账单编码',
							width : 80,
							dataIndex : 'code',
							sortable : true,
							summaryRenderer : function(v, params, data) {
								return ((v === 0 || v > 1) ? '(' + v + ' Tasks)' : '(1 Task)');
							},
							renderer : function(data, metadata, record, rowIndex, columnIndex, store) {
								metadata.attr = 'ext:qtitle="' + this.header + '"' + ' ext:qtip="' + data + '"';
								return data;
							}
						}, {
							header : '客户名称',
							width : 80,
							dataIndex : 'compName',
							sortable : true,
							renderer : function(data, metadata, record, rowIndex, columnIndex, store) {
								metadata.attr = 'ext:qtitle="' + this.header + '"' + ' ext:qtip="' + data + '"';
								return data;
							}
						}, {
							header : '案件名称',
							width : 80,
							dataIndex : 'taskName',
							sortable : true,
							summaryType : 'count',
							hidden : true,
							renderer : function(data, metadata, record, rowIndex, columnIndex, store) {
								metadata.attr = 'ext:qtitle="' + this.header + '"' + ' ext:qtip="' + data + '"';
								return data;
							}
							// ,
						// summaryRenderer: function(v, params, data){
						// return ((v === 0 || v > 1) ? '(' + v +' Tasks)' : '(1 Task)');
						// },
					}	, {
							header : '责任律师',
							width : 80,
							hidden : true,
							dataIndex : 'ownerName',
							sortable : true
						}, {
							header : '应付金额',
							width : 80,
							dataIndex : 'total',
							sortable : true
						}, {
							header : '已付金额',
							width : 80,
							dataIndex : 'paid',
							sortable : true
						}, {
							header : '未付金额',
							width : 80,
							dataIndex : 'unPaid',
							sortable : true,
							renderer : function(val) {
								if (val >= 0) {
									return '<span style="color:blue;">' + val + '</span>';
								} else if (val < 0) {
									return '<span style="color:red;">' + val + '</span>';
								}
								return val;
							}
						}, {
							header : '币种',
							width : 80,
							dataIndex : 'currency',
							sortable : true,
							xtype : 'combocolumn',
							editor : new Ext.form.ComboBox({
										name : 'currency',
										mode : 'local',
										editable : false,
										typeAhead : true,
										forceSelection : true,
										hiddenName : 'currency',
										mode : 'local',
										triggerAction : 'all',
										selectOnFocus : true,
										store : Tm.data.currency,
										allowBlank : false
									})
						}, {
							header : '状态',
							width : 80,
							dataIndex : 'status',
							sortable : true,
							xtype : 'combocolumn',
							editor : new Ext.form.ComboBox({
										name : 'currency',
										mode : 'local',
										editable : false,
										typeAhead : true,
										forceSelection : true,
										hiddenName : 'currency',
										mode : 'local',
										triggerAction : 'all',
										selectOnFocus : true,
										store : Tm.data.billStatus,
										allowBlank : false
									})
						}, {
							header : '付款期限',
							width : 80,
							dataIndex : 'deadline',
							renderer : Ext.util.Format.customDateRenderer('Y-m-d'),
							sortable : true
						}, {
							header : '出账时间',
							width : 80,
							dataIndex : 'chargeoffTime',
							renderer : Ext.util.Format.customDateRenderer('Y-m-d'),
							sortable : true
						}, {
							header : '收讫时间',
							width : 80,
							dataIndex : 'paidTime',
							renderer : Ext.util.Format.customDateRenderer('Y-m-d'),
							sortable : true
						}, {
							header : '描述',
							width : 400,
							dataIndex : 'description',
							sortable : true
						}, {
							header : '汇总',
							width : 80,
							dataIndex : 'groupInfo',
							hidden : true,
							sortable : true
						}]);
				cm.defaultSortable = true;
				var fields = [{
							name : 'id',
							type : 'int',
							mapping : 'id'
						}, {
							name : 'code',
							type : 'string',
							mapping : 'code'
						}, {
							name : 'taskId',
							type : 'int',
							mapping : 'taskId'
						}, {
							name : 'taskName',
							type : 'string',
							mapping : 'taskName'
						}, {
							name : 'compId',
							type : 'int',
							mapping : 'compId'
						}, {
							name : 'compName',
							type : 'string',
							mapping : 'compName'
						}, {
							name : 'compName',
							type : 'string',
							mapping : 'compName'
						}, {
							name : 'owner',
							type : 'int',
							mapping : 'owner'
						}, {
							name : 'ownerName',
							type : 'string',
							mapping : 'ownerName'
						}, {
							name : 'status',
							type : 'string',
							mapping : 'status'
						}, {
							name : 'total',
							type : 'float',
							mapping : 'total'
						}, {
							name : 'paid',
							type : 'float',
							mapping : 'paid'
						}, {
							name : 'unPaid',
							type : 'float',
							mapping : 'unPaid'
						}, {
							name : 'currency',
							type : 'string',
							mapping : 'currency'
						}, {
							name : 'deadline',
							type : 'string',
							mapping : 'deadline'
						}, {
							name : 'paidTime',
							type : 'string',
							mapping : 'paidTime'
						}, {
							name : 'chargeoffTime',
							type : 'string',
							mapping : 'chargeoffTime'
						}, {
							name : 'description',
							type : 'string',
							mapping : 'description'
						}, {
							name : 'groupInfo',
							type : 'string',
							mapping : 'groupInfo'
						}];
				var ds = new Ext.data.GroupingStore({
							id : 'billIndexPanelGridPanelStore',
							proxy : new Ext.data.HttpProxy({
										url : 'bill/queryBill.do'
									}),
							reader : new Ext.data.JsonReader({
										totalProperty : 'totalProperty',
										root : 'root',
										id : 'id',
										fields : fields
									}),
							baseParams : {
								start : 0,
								limit : 20
							},
							sortInfo : {
								field : 'id',
								direction : 'ASC'
							},
							groupField : 'groupInfo',
							sortInfo : {
								field : 'code',
								direction : "ASC"
							},
							autoLoad : true,
							listeners : {
								beforeload : function() {
									Ext.apply(this.baseParams, form.getForm().getFieldValues(false));
									Ext.apply(this.baseParams, {
												deadlineStartDate : form.form.getValues().deadlineStartDate,
												deadlineEndDate : form.form.getValues().deadlineEndDate
											});
								}
							}
						});
				// var summary = new Ext.ux.grid.HybridSummary();
				// summary.toggleSummaries();
				var grid = new Ext.grid.GridPanel({
							store : ds,
							sm : sm,
							cm : cm,
							border : false,
							stripeRows : true,
							autoHeight : true,
							viewConfig : {
								forceFit : true
							},
							bbar : new Ext.PagingToolbar({
										plugins : new Ext.ux.ProgressBarPager(),
										pageSize : 20,
										store : ds,
										displayInfo : true,
										emptyMsg : '没有记录'
									}),
							view : new Ext.grid.GroupingView({
										forceFit : true,
										groupTextTpl : '{text} (账单数 : {[values.rs.length]})',
										showGroupName : false,
										enableNoGroups : false,
										enableGroupingMenu : false,
										hideGroupedColumn : true
									}),
							// plugins: summary,
							// collapsible: true,
							// animCollapse: false,
							listeners : {
								celldblclick : function(grid, rowIndex, columnIndex, event) {
									var store = grid.getStore();
									var data = store.getAt(rowIndex).data;
									var billFeePanel = new Tm.bill.BillFeePanel({
												billId : data.id
											});
									var billFeeWindow = new Tm.common.CommonWindow({
												id : 'billFeeWindow',
												title : '回款管理',
												height : 775,
												width : 800,
												resizable : true,
												items : billFeePanel
											});
									billFeeWindow.on('close', function(panel) {
												ds.load();
											});
									billFeeWindow.show();
								}
							}
						});
				var toolBar = new Ext.Toolbar({
							hideBorders : true,
							buttons : [{
										text : '查询',
										iconCls : 'act_queryIcon',
										handler : function() {
											ds.load();
										}
									}, {
										xtype : 'tbseparator'
									}, {
										text : '重置',
										iconCls : 'act_resetIcon',
										handler : function() {
											form.getForm().reset();
										}
									}, {
										xtype : 'tbseparator'
									}, {
										text : '新增账单',
										iconCls : 'act_addIcon',
										handler : function() {
											var billAddPanel = new Tm.bill.BillAddPanel();
											var billAddWindow = new Tm.common.CommonWindow({
														id : 'billAddWindow',
														title : '新增账单',
														items : billAddPanel
													});
											billAddWindow.on('close', function(panel) {
														ds.load();
													});
											billAddWindow.show();
										}
									}, {
										xtype : 'tbseparator'
									}, {
										iconCls : 'act_deleteIcon',
										tooltip : '删除',
										text : '删除',
										handler : function() {
											var records = grid.getSelectionModel().selections.items;
											if (records.length > 0) {
												var record = records[0];
												if (record.data.id) {
													console.dir(record.data);
													if (record.data.status == 'NEW') {
														Ext.MessageBox.confirm('注意', '您确定要进行该操作', function(btn) {
																	if (btn == 'yes') {
																		Ext.Ajax.request({
																					url : 'bill/deleteBill.do',
																					params : {
																						id : record.data.id
																					},
																					success : function(response, action) {
																						App.setAlert('ok', '操作成功');
																						grid.store.load();
																					}
																				});
																	}
																});
													} else {
														App.setAlert('notice', '只有[草稿]状态的账单可以被删除!');
													}
												}
											}
										},
										scope : this
									}]
						});
				Ext.apply(this, {
							tbar : toolBar,
							items : [form, grid]
						});
				Tm.bill.BillIndexPanel.superclass.initComponent.call(this);
			}
		});
